package com.shensi.appCollect.constantEnum;

import com.shensi.appCollect.pay.PayChannel;
import com.shensi.appCollect.pay.strategy.SXFChannel;
import com.shensi.appCollect.pay.strategy.YunhuaChannel;

import java.util.Arrays;

public enum PayWayPayTypeEnum implements KeyValueable<Integer> {
	
	
	
	/**
	 * 1随行付
	 */
	Pay_Type_Accompanying_payment("随行付",1, SXFChannel.class),
	
	/**
	 * 2云闪付
	 */
	PAY_TYPE_CLOUD_FLASH_PAYMENT("云闪付",2,null),
	
	/**
	 * 3通联
	 */
	PAY_TYPE_COMMUNICATIONS("通联",3,null),
	/**
	 * 4金控
	 */
	PAY_TYPE_GOLDEN_CONTROL("金控",4,null),
	
	/**
	 * 5云华
	 */
	PAY_TYPE_CLOUD_HUA("云华",5, YunhuaChannel.class);
	
	

	private String key;//用来做国际化的KEY
	private Integer value;//数据库存的值
	//对应的策略类
	private Class<? extends PayChannel> channelClass;

	// 构造方法
	PayWayPayTypeEnum(String key, Integer value,Class<? extends PayChannel> channelClass) {
		this.key = key;
		this.value = value;
		this.channelClass = channelClass;
	}

	//覆盖方法
	@Override
	public String toString() {
		return this.key + ":" + this.value;
	}


	@Override
	public Integer getValue() {
		return this.value;
	}

	@Override
	public String getKey() {
		return this.key;
	}

	public Class<? extends PayChannel> getChannelClass() {
		return channelClass;
	}


	/**
	 * 根据value获得枚举对象
	 * @param value value值
	 * @return
	 */
	public static PayWayPayTypeEnum getByValue(Integer value){
		for(PayWayPayTypeEnum typeEnum : values()){
			if (typeEnum.getValue().equals(value)) {
				return typeEnum;
			}
		}
		return null;
	}


	public static Integer getValue(String type) {
		return Arrays.stream(values()).filter(e -> e.getKey().equals(type)).findFirst().map(PayWayPayTypeEnum::getValue).orElse(null);
	}

	public static String getKey(int value) {
		return Arrays.stream(values()).filter(e -> e.getValue().equals(value)).findFirst().map(PayWayPayTypeEnum::getKey).orElse(null);
	}
	
}

